﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace kwzx.Utils
{
    class CommonData
    {
        DataSet1TableAdapters.T_GROUPTableAdapter groupadp = new DataSet1TableAdapters.T_GROUPTableAdapter();
        DataSet1TableAdapters.X_CS_DETAILTableAdapter detailadp = new DataSet1TableAdapters.X_CS_DETAILTableAdapter();

        /// <summary>
        /// 根据部门名称返回用户的人员编号，正式员工返回000，访客返回空值，非正式员工返回9位编号
        /// </summary>
        /// <param name="groupname"></param>
        /// <returns></returns>
        public string getRybh(string groupname, string gzname)
        {
            string rybh = "";
            System.Data.DataTable dtGroup = groupadp.GetDataBy_jgname(groupname);
            System.Data.DataTable dtDetail = detailadp.GetDataBy_MC(gzname);

            if (dtGroup.Rows.Count > 0 && dtDetail.Rows.Count > 0)
            {
                //正式员工走ERP编号-8位，前不足全补零，
                //非正式员走系统编号-9位，编号规则：3位机构码+2位工种码+4位流水号，前不足全补零

                string groupid = dtGroup.Rows[0]["grpup_id"].ToString();
                string jgbm = dtGroup.Rows[0]["jgbm"].ToString();
                string gzmc = dtDetail.Rows[0]["sm"].ToString();
                string jgjsq = dtGroup.Rows[0]["jgjsq"].ToString().PadLeft(4, '0');

                if (jgbm == "000")
                {
                    //石化正式员工机构编码,具体为ERP编号
                    rybh = "9999" + jgjsq;

                    //计数器累加1
                    groupadp.UpdateQuery_addjsq(int.Parse(groupid));

                }
                else
                {
                    //非正式员工(单位编码：去T_GRPUP表中查jgbm字段)、访客(单位编码为：999)用同一种编码
                    rybh = jgbm + gzmc + jgjsq;//员工工号为机构编码+工种+5位流水号

                    //计数器累加1
                    groupadp.UpdateQuery_addjsq(int.Parse(groupid));
                }
            }
            else
            {
                //当前机构或着工种不存在
                rybh = "";
            }
            return rybh;
        }

        /// <summary>
        /// 通过机构ID，工种ID来获取人员编号，正式员工返回000，访客返回空值，非正式员工返回9位编号
        /// </summary>
        /// <param name="groupid"></param>
        /// <param name="gzid"></param>
        /// <returns></returns>
        public string getRybh(int groupid, int gzid)
        {
            string rybh = "";
            System.Data.DataTable dtGroup = groupadp.GetDataBy_grpup_id(groupid);
            System.Data.DataTable dtDetail = detailadp.GetDataBy_detail_id(gzid);

            if (dtGroup.Rows.Count > 0)
            {
                //正式员工走ERP编号-8位，前不足全补零，
                //非正式员走系统编号-9位，编号规则：3位机构码+2位工种码+4位流水号，前不足全补零

                string sgroupid = dtGroup.Rows[0]["grpup_id"].ToString();
                string jgbm = dtGroup.Rows[0]["jgbm"].ToString();
                string gzmc = dtDetail.Rows[0]["sm"].ToString();
                string jgjsq = dtGroup.Rows[0]["jgjsq"].ToString().PadLeft(4, '0');

                if (jgbm == "000")
                {
                    //石化正式员工机构编码,具体为ERP编号
                    rybh = "000";
                }
                else
                {
                    //非正式员工(单位编码：去T_GRPUP表中查jgbm字段)、访客(单位编码为：999)用同一种编码
                    rybh = jgbm + gzmc + jgjsq;//员工工号为机构编码+工种+5位流水号

                    //计数器累加1
                    groupadp.UpdateQuery_addjsq(int.Parse(sgroupid));
                }
            }
            else
            {
                //当前机构或着工种不存在
                rybh = "";
            }
            return rybh;
        }

        /// <summary>
        /// 获取非正式员工的人员编号，定义规则：3位机构编码+2位工种+4位流水号（一共是9位）
        /// </summary>
        /// <param name="groupname"></param>
        /// <param name="gzid"></param>
        /// <returns></returns>
        public string getRybh(string groupname, int gzid)
        {
            string rybh = "";
            System.Data.DataTable dtGroup = groupadp.GetDataBy_jgname(groupname);
            System.Data.DataTable dtDetail = detailadp.GetDataBy_detail_id(gzid);

            if (dtGroup.Rows.Count > 0 && dtDetail.Rows.Count > 0)
            {
                //正式员工走ERP编号-8位，前不足全补零，
                //非正式员走系统编号-9位，编号规则：3位机构码+2位工种码+4位流水号，前不足全补零

                string jgbm = dtGroup.Rows[0]["jgbm"].ToString();//机构编码3位
                string jgjsq = dtGroup.Rows[0]["jgjsq"].ToString().PadLeft(4, '0');//计数器4位
                string gzmc = dtDetail.Rows[0]["sm"].ToString();//工种编码2位

                if (jgbm == "000")
                {
                    //石化正式员工机构编码,具体为ERP编号
                    rybh = "000";
                }
                else
                {
                    //非正式员工(单位编码：去T_GRPUP表中查jgbm字段)、访客(单位编码为：999)用同一种编码
                    rybh = jgbm + gzmc + jgjsq;//员工工号为机构编码+工种+5位流水号
                }
            }
            else
            {
                //当前机构或着工种不存在
                rybh = "";
            }
            return rybh;
        }

        /// <summary>
        /// 正写日志文本 最新的日志放后面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void WriteLogFile(string log)
        {
            string strFilePath = GetLogFilePath();
            System.IO.FileStream fs = new System.IO.FileStream(strFilePath, System.IO.FileMode.Append);
            System.IO.StreamWriter sw = new System.IO.StreamWriter(fs, System.Text.Encoding.Default);
            sw.WriteLine(DateTime.Now.ToString() + "\t" + log);
            sw.Close();
            fs.Close();
        }

        /// <summary>
        /// 取得当前所应操作的日志文件的路径
        /// </summary>
        /// <returns></returns>
        private string GetLogFilePath()
        {
            string strFilePath = "";
            string strYearMonth = DateTime.Now.ToString("yyyyMM");
            string strLogDirPath = Application.StartupPath + "/";
            //判断当前月份是否已有日志文件
            string[] strFilesArray = Directory.GetFiles(strLogDirPath, "log_" + strYearMonth + "_*.txt");
            if (strFilesArray.Length == 0)
            {
                strFilePath = Application.StartupPath + "/log_" + strYearMonth + "_1.txt";
                //之前没有本年月的日志文件 需要新建
                using (File.Create(strFilePath))
                {
                }
            }
            else
            {
                int intOrderID = 1;
                for (int i = 0; i < strFilesArray.Length; i++)
                {
                    string strA = strFilesArray[i].Trim();
                    strA = strA.Substring(strA.LastIndexOf("_") + 1);
                    strA = strA.Replace(".txt", "");
                    int intA = Convert.ToInt32(strA);
                    if (intA > intOrderID)
                        intOrderID = intA;
                }

                strFilePath = Application.StartupPath + "/log_" + strYearMonth + "_" + intOrderID.ToString() + ".txt";
                //this.Label1.Text = strFilePath;
                //之前有 需要判断最后一个是否超容
                FileInfo fileInfo = new FileInfo(strFilePath);
                if (fileInfo.Length >= 1024 * 1024)
                {
                    //超容了 新建之
                    int intCount = intOrderID + 1;
                    strFilePath = Application.StartupPath + "/log_" + strYearMonth + "_" + intOrderID.ToString() + ".txt";
                    using (File.Create(strFilePath))
                    {
                    }
                }
            }
            return strFilePath;
        }
    }
}
